#pragma once
#include <time.h>
#include "Vector.h"

typedef struct node {
    int connfd;     // 文件描述符
    int index;      // 在时间轮中的索引
    struct node* prev;
    struct node* next;
} Node;

typedef struct {
    Node** wheel;  // 时间轮盘 二维数组，方便引用结点地址，改变结点位置
    int slots;      // 槽数, 时间轮盘的大小
    int interval;   // 更新间隔时间
    int current;    // 当前插入位置, wheel的索引
    Vector vec;     // 只保存 connfd, 用来管理fd的数组信息
    time_t last;    // 记录上一次活动的时间
} TimeWheel;

void timewheel_init(TimeWheel* tw, int slots, int interval);
void timewheel_destroy(TimeWheel* tw);

void timewheel_add(TimeWheel* tw, int connfd);
Node* timewheel_remove(TimeWheel* tw, int connfd);
void timewheel_tick(TimeWheel* tw);
